 #ifndef __GPIO_H
 #define __GPIO_H

#include "reg52.h"
#include "type.h"
#include "timer.h"
#include "uart.h"
#include "intrins.h"

/***********************************************************************************************************************
λ���ö���
***********************************************************************************************************************/
#define SET_Bit(val, bitn)      ( (val) |= (INT8U)(1 << (INT8U)(bitn) ) )
#define CLR_Bit(val, bitn)      ( (val) &= (INT8U)((INT8U)((INT8U)1<<(INT8U)(bitn))^(INT8U)255) )
#define GET_Bit(val, bitn)      ( (val) &  (1 << (INT8U)(bitn) ) )
#define CPL_Bit(val, bitn)      ( (val) ^= (INT8U)(1 << (INT8U)(bitn) ) ) 

/***********************************************************************************************************************
74HC595�������ö���
***********************************************************************************************************************/
#define SET_SER()     do{SET_Bit(P3, 4);}while(0)
#define CLR_SER()     do{CLR_Bit(P3, 4);}while(0)
#define SET_SRCLK()   do{SET_Bit(P3, 6);}while(0)
#define CLR_SRCLK()   do{CLR_Bit(P3, 6);}while(0)
#define SET_RCLK()    do{SET_Bit(P3, 5);}while(0)
#define CLR_RCLK()    do{CLR_Bit(P3, 5);}while(0)

/***********************************************************************************************************************
IO�ں����ӿ�
***********************************************************************************************************************/
extern void gpios_init(void);
extern void gpio_debug(void);
extern void send_byte_74HC595(INT8U _byte);
extern void    send_word_74HC595(INT8U _byte_A, INT8U _byte_B);
#define SET_BIT_74HC595(_byte,  _bit)  do{SET_Bit(_byte, _bit);send_byte_74HC595( INT8U _byte);} while(0) 
#endif
